#!/usr/bin/env python2
# -*- coding:utf8 -*-
from time import sleep
import os, mimetypes, sys, signal
from Config import Config
from Log import Log
class App():
  #=============================================================================
  # 实例变量
  # delay; dir_list; f_list; version
  #=============================================================================
  def __init__(self):
    # 切换壁纸延时
    self.delay = Config.delay
    # 文件夹列表，清除非文件夹路径
    self.dir_list = Config.dir_list
    self.cleanDirList()
    # 文件路径列表
    self.getFileList(self.dir_list)
    # gnome版本
    self.version = str(Config.version)
    # 守护进程 id 
    self.getDeamonPid()
    signal.signal(signal.SIGTERM, self.signalHandler)
  def doit(self):
  #=============================================================================
  # 主要功能实现
  # 休眠 delay 秒
  # 更换壁纸
  #=============================================================================
    if self.pid:
      Log.log("Daemon process %d already running" % self.pid)
      return
    self.pid = os.fork()
    if self.pid:
      self.writeDeamonPid()
      Log.log("Deamon process %d stated" % self.pid)
      sys.exit()
    os.setsid()
    while_count = 0
    while True:
      while_count %= len(self.f_list)
      sleep(self.delay)
      self.changeWallpaper(self.f_list[while_count])
      while_count += 1

  def changeWallpaper(self, file_path):
  #=============================================================================
  # 执行更新壁纸的命令
  #=============================================================================
    if self.version == '2':
      os.system('gconftool-2 -s --type=string \
        /desktop/gnome/background/picture_filename %s' % file_path)
    elif self.version == '3':
      os.system('gsettings set org.gnome.desktop.background\
        picture-uri file://%s' % file_path)

  def cleanDirList(self):
  #=============================================================================
  # 清除非目录路径
  #=============================================================================
    self.dir_list = [d for d in self.dir_list if os.path.isdir(d)]

  def getFileList(self, dir_list):
  #=============================================================================
  # 从 dir_list 中取得全部文件-完整路径
  #=============================================================================
    self.f_list = []
    for d in dir_list:
      self.f_list += [d + os.sep + f for f in os.listdir(d)
                      if 'image' in mimetypes.guess_type(d + os.sep + f)[0]]
  def getDeamonPid(self):
    if os.path.exists(Config.pid) and os.path.isfile(Config.pid):
      with open(Config.pid, 'r') as fp:
        pid = fp.readline().replace('\n', '')
        self.pid = int(pid)
        return
    self.pid = 0

  def writeDeamonPid(self):
    with open(Config.pid, 'w') as fp:
      fp.write("%d" % self.pid)

  def cleanDaemonPid(self):
    os.remove(Config.pid)

  def signalHandler(self, sig, frame):
    self.cleanDaemonPid()
    sys.exit()


if __name__ == '__main__':
  app = App()
  app.doit()
